package demo1;

import java.util.ArrayList;
import java.util.List;

/**
 * 抽象通知者.
 *
 * @author GongXincheng
 * @since 2019-09-23 13:37
 */
abstract class BaseSubject {

    /**
     * 通知者状态.
     */
    private String subjectState;

    /**
     * 观察者列表.
     */
    private List<BaseObserver> observerList = new ArrayList<>();

    /**
     * 添加观察者
     *
     * @param observer 抽象观察者对象
     */
    abstract void attach(BaseObserver observer);

    /**
     * 移除观察者
     *
     * @param observer 抽象观察者对象
     */
    abstract void detach(BaseObserver observer);

    /**
     * 为订阅了该通知者的观察者发布通知.
     */
    abstract void notifyObserver();


    public String getSubjectState() {
        return subjectState;
    }

    public void setSubjectState(String subjectState) {
        this.subjectState = subjectState;
    }

    public List<BaseObserver> getObserverList() {
        return observerList;
    }

    public void setObserverList(List<BaseObserver> observerList) {
        this.observerList = observerList;
    }
}
